package DAO;
import java.util.ArrayList;
import Pojo.Fornecedor;
import Pojo.Item;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class FornecedorDAO {
  private ArrayList<Fornecedor> listaFornecedores = new ArrayList<Fornecedor>(); 
  
  /**Metodo que procura um forncedor pelo atributo nome e o remove da lista
   * @param nome - nome do fornecedor
   * @return boolean - true caso tenha encontrado o fornecedor e removido ele da lista
   * false caso contrario
   */
  public boolean excluirFornecedor(String nome){
         for (Fornecedor fornecedor : listaFornecedores) {
            if (fornecedor.getNome().compareTo(nome)==0) {
                return (listaFornecedores.remove(fornecedor));
            }
        }
        return false;
  }  
  
  /**Metodo que adicina um forncedor a lista de fornecedores
   * @param novo - Um fornecedor cadastrado
   */
  public void adicionarFornecedor(Fornecedor novo){
        listaFornecedores.add(novo);
   }
  
  /**Metodo que retorna uma lista de fornecedores
   * @return ArrayList - lista de fornecedores
   */
  public ArrayList getListaFornecedores(){
       return listaFornecedores;   
   }
  
  /**Metodo que busca um fornecedor pelo seu nome na lista de fornecedores 
   * @param nome - nome do fornecedor
   * @return Fornecedor - o forncedor buscado
   */
  public Fornecedor buscaFornecedorNome(String nome){
        for(Fornecedor fornecedor: this.listaFornecedores){
            if (fornecedor.getNome().compareTo(nome)==0) {
                return fornecedor;
            }
        }
        return null;
    }
  
  /**Metodo que busca um fornecedor pelo seu codigo
   * @param codigo - codigo do forncedor
   * @return Fornecedor - Fornecedor Buscado
   */
  public Fornecedor buscaFornecedorCodigo(String codigo){
        for(Fornecedor fornecedor: this.listaFornecedores){
            if(fornecedor.getCodigo().equals(codigo)){
                return fornecedor;
            }
        }
        return null;
    }
  
  /**Metodo que le de um arquivo .txt uma lista de fornecedores cadastrados anteriormente
   * @throws FileNotFoundException 
   */
  public void lerArquivo() throws FileNotFoundException{
        Scanner scanner = new Scanner(new FileReader("Fornecedor.txt"))
                       .useDelimiter("\\||\\n");
        while (scanner.hasNext()) {
           
            Fornecedor novo = new Fornecedor();
            novo.setNome(scanner.nextLine()); 
            novo.setCodigo((scanner.nextLine()));
            novo.setEndereco(scanner.nextLine());
            novo.setTelefone((scanner.nextLine()));            
            scanner.nextLine();
            adicionarFornecedor(novo);
            
        }
    }
  
  /**Metodo que le de um arquivo .txt uma lista de itens e associa esses itens a cada fornecedor especifico
   * @param itemDao - Funcões que auxiliam na busca de um item
   * @throws FileNotFoundException 
   */
  public void lerArquivoPegarItens(ItemDAO itemDao) throws FileNotFoundException{
        Scanner scanner = new Scanner(new FileReader("Fornecedor.txt"))
                       .useDelimiter("\\||\\n");
        
        for (Fornecedor fornecedor : this.listaFornecedores) {
            scanner.nextLine();
            scanner.nextLine();
            scanner.nextLine();
            scanner.nextLine();
            String[] s1 = scanner.nextLine().split(" ");
            for (String string : s1) {
                Item aux = itemDao.buscaItemNome(string);
                if(aux != null){
                    fornecedor.adicionarItem(aux);
                }
            }
        }
        while (scanner.hasNext()) {
           
            Fornecedor novo = new Fornecedor();
            novo.setNome(scanner.nextLine()); 
            novo.setCodigo((scanner.nextLine()));
            novo.setEndereco(scanner.nextLine());
            novo.setTelefone((scanner.nextLine()));            
            scanner.nextLine();
            adicionarFornecedor(novo);
            
        }
    }
  
  /**Metodo que cria um arquivo .txt e transfere para ele todos os fornecedores cadastrados 
   */
  public void escreverArquivo(){
        try {
            FileWriter fw = new FileWriter("Fornecedor.txt",false);
            PrintWriter saida = new PrintWriter(fw,true);
            for(Fornecedor fornecedor : this.listaFornecedores){
                saida.println(fornecedor.getNome());
                saida.println(fornecedor.getCodigo());
                saida.println(fornecedor.getEndereco());
                saida.println(fornecedor.getTelefone());
                
                for (Item item : fornecedor.getListaItens()) {
                    saida.print(item.getNome()+" ");
                }
                saida.println();
            }    
            saida.close();
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

